/**
 * 
 */
package util;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 * @author agnaldo
 *
 */
public class AnotationLayer extends JPanel implements MouseMotionListener{

	private BufferedImage image;

	private ArrayList<PixelAnotado> listaPixels;
	private Color corAtual = Color.BLACK; //valor default
	private int classeAtual = 0;    // valor default
	private JLabel label;
	private double fatorZoom = 1;
	private boolean isSelectOn = false;
	int xAtual, yAtual; 
	
	
	public AnotationLayer( BufferedImage im) {
		image = im;
		inicialize(im.getWidth(), im.getHeight());
	}//fim construtor
	
	public AnotationLayer( BufferedImage im, JLabel l) {
		image = im;
		label = l;
		inicialize(im.getWidth(), im.getHeight());
	}//fim construtor
	
	private void inicialize(int width, int height) {
		this.setPreferredSize(new Dimension(width, height));
		listaPixels = new ArrayList<PixelAnotado>();
		//trata evento de movimento do mouse
		this.addMouseMotionListener( this );
		repaint();
	}
	
	/**
	 *  Subrescrevendo o método usado pelo Sistema Operacional para 'printar' este objeto na tela
	 */
	public void paintComponent(Graphics g) {
		super.paintComponents(g);   //limpa a area de desenho, sem isso o desenho vai apagar sempre q mexer na janela
		g.drawImage(image, 0, 0, null);
	}

	private void desenha(int x, int y) {
		
		Graphics g2 = image.createGraphics(); // pegando contexto gráfico da imagem para desenhar -modificar-
		//g.setColor(cor);
		g2.setColor(corAtual);
		//image.fillOval(pontos[pointCounter].getCoordenada().x, pontos[pointCounter].getCoordenada().y, 8, 8);
		g2.fillOval(x,y, 8, 8);
		//g.fillOval(xAtual,yAtual, 8, 8);
		
		g2.dispose();
		//repaint();
	}
	
private void desenha2(int x, int y, Graphics g2) {
		
		//Graphics g2 = image.createGraphics(); // pegando contexto gráfico da imagem para desenhar -modificar-
		//g.setColor(cor);
		g2.setColor(corAtual);
		//image.fillOval(pontos[pointCounter].getCoordenada().x, pontos[pointCounter].getCoordenada().y, 8, 8);
		g2.fillOval(x,y, 8, 8);
		//g.fillOval(xAtual,yAtual, 8, 8);
		
		//g2.dispose();
		//repaint();
	}
	
	
	
	
	/**
	 * Obtém o ArrayList com os pixels anotados pelo usuário
	 */
	public ArrayList<PixelAnotado> getListaPixels() {
		return listaPixels;
	}
	
	public void setListaPixels(ArrayList<PixelAnotado> newList) {
		listaPixels = newList;
	}
	

	public double getFatorZoom() {
		return fatorZoom;
	}

	public void setFatorZoom(double fatorZoom) {
		this.fatorZoom = fatorZoom;
	}

	@Override
	public void mouseDragged(MouseEvent evt) {
		
		if (getIsSelectOn() && listaPixels != null) {
			desenha2(evt.getX(), evt.getY(), this.getGraphics());
			desenha(evt.getX(), evt.getY());
			
			if (!listaPixels.add(new PixelAnotado(evt.getX(),evt.getY(), classeAtual)))
				System.out.println(" Falha ao inserir anotação do usuário. Perdeu Pixel");
			
			//repaint();
			//evt.getComponent().repaint();
		}
	}

	@Override
	public void mouseMoved(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	public Color getCorAtual() {
		return corAtual;
	}

	public void setCorAtual(Color corAtual) {
		this.corAtual = corAtual;
	}

	public int getClasseAtual() {
		return classeAtual;
	}

	public void setClasseAtual(int classeAtual) {
		this.classeAtual = classeAtual;
	}

	public boolean getIsSelectOn() {
		return isSelectOn;
	}

	public void setSelectOn(boolean isSelectOn) {
		this.isSelectOn = isSelectOn;
	}

}//fim da classe
